Key

scroll

Key Blog

  • Key 홈페이지>
  • 블로그>
  • [ue5] 메모리 최적화에 유용한 도구, 명령어 및 최적화 방법 목록
  • [UE5] 메모리 최적화에 유용한 도구, 명령어 및 최적화 방법 목록

    @kiikey4(Key Zhao)

    [UE5] 메모리 최적화에 유용한 도구, 명령어 및 최적화 방법 목록

    게시일 2024년 12월 17일

    0

    개요

    이 글의 전반부에서는 Unreal Engine (UE)에서 메모리 최적화를 위한 유용한 명령어와 도구들을 소개합니다. 후반부에서는 이러한 명령어와 도구들을 활용해 UE에서 메모리를 최적화하는 방법을 설명합니다.
    이 글과 함께 제공되는 다양한 참조 기사 및 비디오들을 결합하면 더 깊이 있는 이해를 도울 수 있습니다.

    환경

    • Unreal Engine 5.4

    주요 내용

    메모리 최적화의 목적

    • 성능 향상
      효율적인 메모리 관리는 프레임 속도 및 전반적인 게임 성능을 향상시킵니다.
    • 메모리 부족으로 인한 충돌 해결
    • 로드 시간 단축
      최적화된 텍스처와 자산은 로드 시간을 단축시킵니다.

    유용한 UE 메모리 관리 명령어 및 도구

    stat memory

    • 명령어: stat memory
      게임 화면에서 메모리 사용량을 타입별로 표시합니다.

    StatMemory_t1z2t8

    Memreport

    • 명령어: memreport -full
      메모리 리포트를 덤프 파일로 저장합니다.
    • 명령어: memreport -log
      메모리 리포트를 로그에 표시합니다.

    Memreport 참조:

    Qiita: Memreport로 메모리 누수 원인 분석하기 (ja)
    Ari's Unreal Engine Notes: 메모리 누수 디버깅
    [UE4] Memreport 활용하기! (ja)

    Memreport 예시

    1. 전체 메모리 사용량 표시

      • 덤프 파일에서 "Physical Memory"를 검색하여 이 정보를 확인할 수 있습니다.
        image_zwpbqj
    2. 메모리 사용량에 따른 텍스처 목록 (내림차순)

      • 덤프 파일에서 "listtextures"를 검색하여 이 데이터를 확인할 수 있습니다.
        image_qfkujl

    객체 목록 명령어

    • 명령어: obj list
      현재 존재하는 객체를 나열합니다.
    • 명령어: obj list name=
      이름으로 객체를 검색합니다.
    • 명령어: obj refs name=
      객체의 참조를 이름으로 표시합니다.

    Obj List 참조 기사:

    [UE4] Obj 명령어로 객체 분석하기

    Obj List는 아래 이미지와 같이 표시됩니다: image_ad9wgh

    가비지 컬렉션(GC) 명령어

    • 명령어: obj gc
      가비지 컬렉션을 한 번 실행합니다.
    • 명령어: gc.ForceCollectGarbageEveryFrame 1
      매 프레임마다 가비지 컬렉션을 강제로 실행합니다.
    • 명령어: gc.ForceCollectGarbageEveryFrame 0
      매 프레임마다 가비지 컬렉션을 강제로 실행하는 것을 중지합니다.

    가비지 컬렉션(GC)을 통해 자산을 해제하거나 참조를 확인할 수 있습니다.

    프레임마다 강제로 GC를 실행하면 게임이 느려질 수 있으므로 조사 목적 외에는 사용하지 않는 것이 좋습니다.

    GC 참조:

    GC란?: 공식 문서: Unreal Engine의 Unreal 객체 처리

    【UE5】가비지 컬렉션 강제 실행 (ja)

    【UE4】UObject의 PendingKill에 대하여 | HEXADRIVE (ja)

    Low-Level Memory Tracker (LLM)

    • 명령어: stat llm
      Low-Level Memory Tracker를 사용하여 메모리 사용량을 추적합니다.

    자세한 내용은 아래의 참조를 참조하세요.

    LLM 참조:

    공식 문서: Low-Level Memory Tracker

    [UE4] 메모리 추적을 위한 LLM 사용법 (ja)

    참조 뷰어

    이 도구는 다른 자산을 참조하거나 참조하는 자산의 그래프를 표시합니다.
    UE에서 자산을 우클릭하고 "Reference Viewer"를 선택하여 사용할 수 있습니다.
    로드되지 말아야 할 자산이 예기치 않게 로드되는지 조사할 때 유용합니다.

    공식 문서: Reference Viewer

    image_doxlqp

    사이즈 맵

    UE에서 자산을 우클릭 -> "Size Map" -> 오른쪽 상단에서 "Memory" 선택.
    모든 참조된 자산들의 총 메모리 사용량을 표시합니다.

    사이즈 맵 참조:

    비디오: Unreal Engine 5 게임에서 메모리 사용 최적화 방법

    image_tflhtf

    메모리 인사이트

    • 시간에 따른 메모리 할당 및 해제 분석 도구
      예시: 시간 A -> 시간 B 메모리 할당 123.456MB

    메모리 인사이트 참조:

    Qiita: UE4 메모리 인사이트로 메모리 추적하기 (ja)

    공식 문서: 메모리 인사이트

    메모리 누수 조사를 위한 메모리 인사이트 비디오 (34:38): Unreal Fest 2022에서 게임 성능 극대화

    image_tjggde

    메모리 조사 및 최적화 접근 방식

    메모리 최적화 흐름은 일반적으로 아래 단계를 따릅니다:

    MemOptimizationFlow_en_xmleen

    메모리 문제 식별
    충돌 로그나 메모리 경고를 찾아봅니다.

    LowMemoryWarning_ja_udacd1

    데이터 수집
    stat memory, memreport, 메모리 인사이트 및 UE 외부의 다른 프로파일러 도구를 사용하여 메모리 사용량을 조사합니다:

    • 실제 장치나 패키지된 버전에서 조사해야 합니다.
      • PIE 모드에서는 미리 로드된 캐시 및 백그라운드 작업이 측정에 영향을 미쳐 정확한 결과를 얻기 어려울 수 있습니다.
    • 메모리 사용량은 장치마다 다릅니다.
    전체 메모리 사용량 확인

    전체 메모리 사용량을 확인하려면 최소 500MB의 물리적 메모리가 남아 있는지 확인하는 것이 좋습니다.

    memreport -full을 사용하여 확인합니다:

    • Memreport의 일부: 전체 메모리 사용량을 표시합니다.
      • 덤프 파일에서 "Physical Memory"를 검색하여 이 정보를 찾을 수 있습니다. image_zwpbqj
    텍스처 메모리 사용량 확인

    listtextures nonvt 보고서를 표시하여 텍스처 메모리 사용량을 확인할 수 있습니다 (크기 순으로 정렬됨).

    memreport -full을 사용하여 확인합니다:

    • Memreport의 일부: 텍스처를 메모리 사용량 내림차순으로 표시합니다.
      • 덤프 파일에서 "listtextures"를 검색하여 이 정보를 확인할 수 있습니다. image_qfkujl

    데이터 분석
    높은 메모리 사용량을 보이는 리소스를 식별합니다 (예: 텍스처, 재질).
    불필요하거나 지나치게 큰 자산을 조사합니다.

    불필요한 자산이 로드되었는지 조사하려면:

    obj list name= 명령어로 자산 이름을 검색하고 로드되었는지 확인합니다.
    예시: obj list name=T_SomeTexture

    obj refs name= 명령어로 주어진 자산을 참조하는 객체를 표시하여 자산이 왜 로드되었는지 알 수 있습니다.
    예시: obj refs name=T_SomeTexture

    또한 참조 뷰어를 사용하여 참조의 출처를 추적하고 강한 참조가 어떻게 이루어졌는지 조사할 수 있습니다.

    강한 참조와 약한 참조에 대해 더 알고 싶다면:

    강한 참조와 약한 참조 (ja)

    BP에서 참조 체인 끊는 방법 (ja)

    개선 사항 제안

    • 불필요한 자산 삭제하거나 로드되지 않도록 설정합니다.
    • 큰 텍스처의 해상도를 줄이거나 압

    개선 사항 제안

    • 불필요한 자산 삭제하거나 로드되지 않도록 설정합니다.
    • 큰 텍스처의 해상도를 줄이거나 압축 설정을 조정합니다.
    • 데이터 분석에 따라 다른 조정 사항을 적용합니다:
      • 예: 모바일 게임에서는 조명 설정을 조정하면 메모리 사용을 줄일 수 있습니다.

    압축 형식에 대한 참고 자료:

    텍스처 형식에 대하여 (ja)

    [UE5] 이미지 압축 형식 (ja)

    텍스처 최적화:

    비디오: Unreal Engine 5에서 모바일용 텍스처 최적화 UE5의 기본 Mipmap 설정 (ja)

    개선 사항 구현
    문제가 있는 자산을 수정하거나 로드되지 않도록 설정합니다.

    • 불필요한 자산 삭제:
      • 하드 참조를 제거합니다.
    • 더 이상 사용되지 않는 자산을 해제합니다:
      • 하드 참조를 소프트 참조로 변경하고, 해제되어야 할 때 nullptr로 설정하여 다음 GC 실행 시 자산이 해제되도록 합니다.
    • 큰 텍스처의 해상도를 줄이거나 압축 설정을 조정합니다.
    • 필요한 경우 다른 조정을 적용합니다.

    검증
    최적화 전후의 메모리 사용량을 memreport로 비교합니다.

    문제가 있는 자산이 더 이상 로드되지 않는지 확인하는 방법

    GC를 강제로 실행하려면 gc.ForceCollectGarbageEveryFrame 1 또는 obj gc 명령을 사용할 수 있습니다. 자산이 더 이상 참조되지 않으면 (소프트 참조에 대해 nullptr을 설정하여) 이 시점에서 강제로 GC를 실행할 수 있습니다. 또한 obj list name= 명령을 사용하여 자산이 여전히 로드되어 있는지 확인할 수 있습니다. 여전히 로드되어 있다면 이는 남아 있는 참조가 있다는 의미이므로 다시 데이터를 분석해야 합니다.

    메모리 사용 변화 비교

    전체 메모리 사용량을 확인하고 최적화나 조정 후의 변화를 비교하려면 memreport -full 또는 memreport -log 명령을 사용합니다.

    메모리 최적화의 핵심 사항

    • 메모리 누수를 방지하는 습관을 개발하고, 자산이 제대로 해제되었는지 확인합니다.
    • 참조된 모든 객체를 로드하는 하드 참조에 주의합니다.
    • 가능하다면 소프트 참조를 사용합니다.
    • 메모리 사용을 지속적으로 모니터링하여 개선합니다.

    요약

    • 메모리 최적화의 중요성
      성능 향상, 로드 시간 단축 및 메모리 부족으로 인한 충돌 방지를 목표로 합니다.
    • 유용한 명령어 및 도구
      • stat memory
      • memreport -log, memreport -full
      • obj list, obj refs name=
      • obj gc, gc.ForceCollectGarbageEveryFrame
      • LLM
      • 참조 뷰어
      • 사이즈 맵
      • 메모리 인사이트
    • 최적화 프로세스
      문제를 식별하고, 데이터를 수집하고, 분석하고, 개선 사항을 제안하고, 수정 사항을 구현하고, 검증합니다.
    개선 사항의 예
    • 불필요한 자산 삭제하거나 로드되지 않도록 설정
    • 큰 텍스처의 해상도를 줄이거나 압축 설정을 조정
    • 데이터 분석에 따라 다른 조정 사항을 적용

    메모리 부족으로 인한 충돌이 발생했을 때 이 기사가 도움이 되기를 바랍니다.
    오류가 있을 경우 댓글로 알려주시면 수정하겠습니다.

    참고자료

    0

    댓글

    댓글이 없습니다

    느낌을 댓글로 남겨보세요